package com.itheima.controller;

import com.itheima.project.Result;
import com.itheima.util.AliOssUtilProperties;
import com.itheima.util.AliyunOssUtils;

import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;


@Slf4j
@RestController
@RequestMapping("/upload")
public class UploadController {

    /**@Value("${aliyun.oss.endpoint}")
    private String endpoint;*/
    //private String endpoint = "https://oss-cn-shenzhen.aliyuncs.com";
    //可以将这个域名写入配置文件中(properties/yml/xml文件)，解决硬编码的问题，方便修改配置
    //使用@Value注解，注解属性设置为配置文件中的键值用${}拼接

   /** @Value("${aliyun.oss.bucketName}")
    private String bucketName;*/
    //如果存在大量需要注入的文件，可以指定一个类把这些属性全部放进去，使用configurationProperties("prefix = 前缀")为属性赋值
    //详情请看AliOssUtilProperties


   //另一种方法,
   @Resource
   private AliOssUtilProperties aliOssUtilProperties;

    @PostMapping
    public Result uplaod(MultipartFile file) throws Exception {
        // public Result uplaod(String username, Integer age,@RequestParam("file")MultipartFile file) throws Exception {
        // log.info("文件上传：{},{},{}",username,age,file); //这里可以使用注解 MultipartFile 参数名就可以随便写了
        // return Result.success();
        //获取原始文件名
        //  String origimalFilename = file.getOriginalFilename();
        //构建新的文件名
        // String newFileName = UUID.randomUUID()+origimalFilename.substring(origimalFilename.lastIndexOf("."));
        //将文件保存在服务端的目录下；
        //  file.transferTo(new File("D:/images/" + newFileName));

        String bucketName = aliOssUtilProperties.getBucketName();
        String endpoint = aliOssUtilProperties.getEndpoint();


        String extName = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
        String url = AliyunOssUtils.upload(endpoint, bucketName, file.getBytes(), extName);
        return Result.success(url);
    }
}
